package com.pms.util;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.pms.util.idutil.SnowFlake;

import java.util.HashMap;
import java.util.Map;

/**
 * mp代码生成
 *
 * @author zyl
 * @create 2017-06-05 13:55
 **/
public class MpGenerator {
   /* public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置

        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("D:\\ideaWork\\pms\\pms-estate\\src\\main\\java");
        gc.setFileOverride(true);
        gc.setActiveRecord(true);
        gc.setEnableCache(false);// XML 二级缓存

        gc.setBaseResultMap(true);// XML ResultMap

        gc.setBaseColumnList(false);// XML columList

        gc.setAuthor("ASUS_B");
        // 自定义文件命名，注意 %s 会自动填充表实体属性！

        // gc.setMapperName("%sDao");

        // gc.setXmlName("%sDao");

        // gc.setServiceName("MP%sService");

        // gc.setServiceImplName("%sServiceDiy");

        // gc.setControllerName("%sAction");

        mpg.setGlobalConfig(gc);
        // 数据源配置

        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        dsc.setUrl("jdbc:mysql://192.168.1.224:3306/cloud_estate?characterEncoding=utf8");
        mpg.setDataSource(dsc);
        // 策略配置

        StrategyConfig strategy = new StrategyConfig();
        //strategy.setTablePrefix("beautiful_");// 此处可以修改为您的表前缀

        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
       // strategy.setInclude(new String[] { "sys_config","sys_log","sys_menu","sys_role","sys_role_menu","sys_user","sys_user_role","sys_user_token"}); // 需要生成的表
        strategy.setInclude(new String[] { "house_master_info"});
        //strategy.setInclude(new String[] { "schedule_job","schedule_job_log"}); // 需要生成的表

        // strategy.setExclude(new String[]{"test"}); // 排除生成的表
        // 自定义实体父类

        // strategy.setSuperEntityClass("");

        // 自定义实体，公共字段

//         strategy.setSuperEntityColumns(new String[] { "snowFlakeId=new SnowFlake(0,0).nextId();", "age" });

        // 自定义 mapper 父类

        // strategy.setSuperMapperClass("");

        // 自定义 service 父类

        // strategy.setSuperServiceClass("");

        // 自定义 service 实现类父类

        // strategy.setSuperServiceImplClass("");

        // 自定义 web 父类

        strategy.setSuperControllerClass("BaseController");

        // 【实体】是否生成字段常量（默认 false）

//       final Long snowFlakeId = new SnowFlake(0,0).nextId();;
//
//         strategy.setEntityColumnConstant(true);

        // 【实体】是否为构建者模型（默认 false）

//         public User setName(String name) {this.name = name; return this;}
//
//         strategy.setEntityBuliderModel(true);

        mpg.setStrategy(strategy);
        // 包配置

        PackageConfig pc = new PackageConfig();
        pc.setParent("com");
        pc.setModuleName("pms");
        pc.setXml("mapper");
        mpg.setPackageInfo(pc);
        // 注入自定义配置，可以在 VM 中使用 cfg.abc 设置的值

        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
                this.setMap(map);
            }
        };
        mpg.setCfg(cfg);
        // 自定义模板配置，可以 copy 源码 mybatis-plus/src/main/resources/template 下面内容修改，

        // 放置自己项目的 src/main/resources/template 目录下, 默认名称一下可以不配置，也可以自定义模板名称

        // TemplateConfig tc = new TemplateConfig();

        // tc.setController("...");

        // tc.setEntity("...");

        // tc.setMapper("...");

        // tc.setXml("...");

        // tc.setService("...");

        // tc.setServiceImpl("...");

        // mpg.setTemplate(tc);

        // 执行生成

        mpg.execute();
        // 打印注入设置

        System.err.println(mpg.getCfg().getMap().get("abc"));
    }*/

}
